/*
 * Copyright the original author or authors.
 * 
 * Licensed under the MOZILLA PUBLIC LICENSE, Version 1.1 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.mozilla.org/MPL/MPL-1.1.html
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import pl.milib.tools.Impuls;
import pl.milib.tools.ImpulsOwner;

/**
 * @author Marek Brun 'minim'
 */
class pl.milib.tools.DelayedImpuls extends Impuls {
	
	private var delayTime : Number;	private var isNowDelay : Boolean;
	
	public function DelayedImpuls(owner:ImpulsOwner, $oneImpulsMSTime:Number, $delayMSTime:Number) {
		super(owner, $oneImpulsMSTime);
		delayTime=$delayMSTime==null ? 1000/31 : $delayMSTime;
		isNowDelay=false;
	}//<>
	
	public function start(isRestartIfRunning:Boolean):Boolean {
		if(getIsRunning() && isRestartIfRunning){
			isNowDelay=true;
			setLastImpulsTimeAsTimeNow();
		}else{
			isNowDelay=true;
			return super.start();
		}
	}//<<
	
//****************************************************************************
// EVENTS for DelayedImpuls
//****************************************************************************
	public function onEnterFrame(id) : Void {
		var currentTime:Number=getTimer();
		if(isNowDelay){			
			if(currentTime-lastImpulsTime>delayTime){
				lastImpulsTime=currentTime;
				owner.onSlave_Impuls_NewImpuls(this);
				isNowDelay=false;
			}
		}else{			
			if(currentTime-lastImpulsTime>oneImpulsTime){
				lastImpulsTime=currentTime;
				owner.onSlave_Impuls_NewImpuls(this);
			}
		}
	}//<<
	
}